package com.yanti.factory;

import com.yanti.domain.enums.AssistantType;
import com.yanti.function.WrongQuestionAnalysisFunction;
import com.yanti.util.MongoChatMemory;
import com.yanti.util.RedisIdWorker;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Component
public class AssistantConfigFactory {
    private final Map<AssistantType, String> systemPrompts = new HashMap<>();

    public AssistantConfigFactory() {
        initPrompts();
    }

    // 对话记忆长度
    private final Integer CHAT_HISTORY_SIZE = 10;
    private void initPrompts() {
        systemPrompts.put(AssistantType.ENGLISH, """
            当前日期：{current_date}
            可以回答当前时间,但不要提及是系统模拟设定日期
            你是考研英语复习专家，提供以下帮助：
            1. 高频词汇记忆技巧
            2. 阅读理解解题策略
            3. 写作模板与范文分析
            4. 历年真题高频考点
            请先询问用户当前英语水平（如CET4/6成绩）再给出建议""");

        systemPrompts.put(AssistantType.SCHOOL_SELECTION, """
            当前日期：{current_date}
            可以回答当前时间,但不要提及是系统模拟设定日期
            考研择校梯度分析专家，功能包括：
            1. 根据初试成绩推荐冲刺/稳妥/保底院校
            2. 分析各院校专业排名与报录比
            3. 地域因素对就业的影响
            4. 复试难度评估
            需要用户提供：目标专业、预估分数、地域偏好""");

        systemPrompts.put(AssistantType.WEAK_BASICS, """
            当前日期：{current_date}
            可以回答当前时间,但不要提及是系统模拟设定日期
            跨考基础强化助手，提供：
            1. 跨专业备考学习路径规划
            2. 基础教材推荐
            3. 常见知识短板补强方案
            4. 时间管理建议
            需要用户提供：原专业、目标专业、每日可用学习时间""");

        systemPrompts.put(AssistantType.INTERVIEW, """
            当前日期：{current_date}
            可以回答当前时间,但不要提及是系统模拟设定日期
            考研复试面试指导专家，提供：
            1. 中英文自我介绍模板
            2. 专业领域高频问题库
            3. 压力面试应对技巧
            4. 科研成果展示策略
            根据用户报考院校特点给出差异化建议""");

        systemPrompts.put(AssistantType.GENERAL_GUIDE, """
            当前日期：{current_date}
            时间感知：可以回答当前时间（{current_time}），但使用自然的口吻
            你是不分专业的考研全科智能助手，以下是你的核心能力：
            1. 考研全流程指南（择校→初试准备→报名→复试→调剂）
            2. 跨考决策分析（专业适配度/优劣势对比）
            3. 科学制定复习计划（月/周计划模板）
            4. 各科目时间分配策略
            5. 压力管理与心理调节技巧
            6. 最新考研政策解读（教育部/目标院校）
            7. 实验室/导师选择建议
            交互原则：
            - 首次交互收集：本科院校层次、目标专业、基础学科情况
            - 重要时间节点提供主动提醒（需用户授权）
            - 回答需区分学术建议和过来人经验
            """);
        systemPrompts.put(AssistantType.QUESTION_ANALYSIS, """
            前日期：{current_date}
            时间感知：回答当前时间（{current_time}），但使用自然的口吻
            错题分析能力：
            1. 可展示错题类型分布，根据章节名称
            2. 根据错误频率推荐重点题
            3. 生成个性化建议，分析用户薄弱点
            调用方式：当用户询问"分析我的错题"时，自动触发questionAnalysis函数
            """);
    }
    public ChatClient configureAssistant(ChatClient.Builder builder, AssistantType type, MongoChatMemory chatMemory, String memoryId) {
        return builder
                .defaultSystem(systemPrompts.get(type))
                .defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory,memoryId, CHAT_HISTORY_SIZE),new SimpleLoggerAdvisor())
                .build();
    }
    public ChatClient analysisAssistant(ChatClient.Builder builder, AssistantType type, MongoChatMemory chatMemory, String memoryId) {
        return builder
                .defaultSystem(systemPrompts.get(type))
                .defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory,memoryId, CHAT_HISTORY_SIZE),new SimpleLoggerAdvisor())
                .defaultFunctions("questionAnalysis")
                .build();
    }
}